<?php
/**
 * Esta classe implementa o Helper de view
 * da tag input do html 
 *
 * @category    Fencer
 * @package     Fencer_View
 * @subpackage  Fencer_View_Helper
 * @copyright   Copyright (c) 2012 FencerWeb
 * @version     $Id: 
 */
require_once 'Zend/View/Helper/Abstract.php';
class Fencer_View_Helper_FInput extends Fencer_View_Helper_FencerHtmlElements {
	
	/**
	 * Método inicializador da classe. Deve ser chamado na view
	 * @param array $adicionaConfig
	 * @param array $removeConfig
	 * @return Object $helper
	 */
	public function fInput( $adicionaConfig = array(), $removeConfig = array()  ) {
		//Cria uma instância da classe
		$input = new Fencer_View_Helper_FInput();
		
		//adiciona os elementos iniciais configuráveis nesta classe
		$adicionaConfig = $input->_setElementosIniciaisTypeText($adicionaConfig);
		//Remove as configurações
		$input->setRemoveConfig($removeConfig);
		//Seta as configurações adicionais
		$input->setAdicionaConfig($adicionaConfig);
		//verifica se o type para o input é válido
		$input->_verificaTypeInvalido();
		//verifica se o type do remove para o input é válido
		if(is_array($removeConfig)){
			if(key_exists('type', $removeConfig)){
				$input->_verificaTypeRemoveInvalido($removeConfig['type']);
				
			}
		}
		
		$atributos = implode(' ', $input->getAtributo());
		
		$retorno = "";
		$retorno = "<input {$atributos} />" . PHP_EOL;
			
		return $retorno;
		
// 		//Seta a view
// 		$helper = $this->setView ( $this->view );
	
// 		return $helper;
	}
	
	
	/**
	 * Método que printa o retorno do input na view
	 * @return String $retorno
	 */
// 	public function __toString(){
// 		try{
			
// 			$atributos = implode(' ', $this->getAtributo());

// 			$retorno = "";
// 			$retorno = "<input {$atributos} />" . PHP_EOL;
			
// 			return $retorno;
		
// 		}catch ( Zend_Exception $e){
// 			echo $e->getMessage();
// 		}
	
// 	}
	
	/**
	 * Método que inicializa a tag com os elementos iniciais que serão
	 * configurados neste métodos
	 * @param array $adicionaConfig
	 * @return array $adicionaConfig
	 */
	private function _setElementosIniciaisTypeText($adicionaConfig){
		$id = mt_rand();
		
		if(!array_key_exists(Fencer_View_Helper_FencerHtmlElements::F_HTML_ATTR_ID, $adicionaConfig)){
			$this->setId("{$id}");
			
		}
		if(!array_key_exists(Fencer_View_Helper_FencerHtmlElements::F_HTML_ATTR_NAME, $adicionaConfig)){
			$this->setName("{$id}");
		}
		if(!array_key_exists(Fencer_View_Helper_FencerHtmlElements::F_HTML_ATTR_SIZE, $adicionaConfig)){
			$this->setSize(50);		
		}
		
// 		if(array_key_exists($this->F_HTML_ATTR_CLASS, $adicionaConfig)){
// 			$adicionaConfig[$this->F_HTML_ATTR_CLASS][] = 'class21';
// 			$adicionaConfig[$this->F_HTML_ATTR_CLASS][] = 'class22';
// 		}else{
// 			$adicionaConfig[$this->F_HTML_ATTR_CLASS] = array('class44','class45');
// 		}
		
		return $adicionaConfig;
	}
	
	/**
	 * 
	 * Verifica se o type informado é válido
	 * @param String $type
	 * @return void
	 */
	private function _verificaTypeInvalido(){
		$type = $this->getType();
		//quando não é informado
		if(empty($type) || is_null($type)){
			$this->_erroType(null,true);		
		}
		
		$types = $this->getArrayTypeTagInput();
		//quando é informado porem está incorreto
		if(!in_array($type, $types)){
			$this->_erroType($type);	
		}
		
	}
	
	/**
	 * 
	 * Verifica se o type informado é válido
	 * @param String $type
	 * @return void
	 */
	private function _verificaTypeRemoveInvalido($type){
		//quando não é informado
		if(!empty($type) || !is_null($type)){
			$types = $this->getArrayTypeTagInput();
			//quando é informado porem está incorreto
			if(!in_array($type, $types)){
				$this->_erroType($type);	
			}
		}
		
	}	
	
	/**
	 * 
	 * Gera a tela de erro para o atributo Type
	 * @param String $typeIncorreto
	 * @param boolean $naoInformado
	 * @return void
	 */
	private function _erroType($typeIncorreto = null, $naoInformado = false){
		$css = $this->getCssTelasDeErro(); 
		
		if($naoInformado){
			$erroLegend  = "Erro - Input Type não foi informado.";
			$erroSpan    = "O input type é um atributo obrigatório e não foi informado.";	
		}else{
			$erroLegend = "Erro - Input Type incorreto."; 
			$erroSpan   = "O input type <strong>{$typeIncorreto}</strong> está incorreto.";
		}
		
		$retorno  .= "<fieldset class=\"fieldset-erro-type-input\" style=\"{$css['fieldset']}\">";
		$retorno  .= "<legend id=\"conteudo-nome\" style=\"{$css['legend']}\">{$erroLegend}</legend>";
		$retorno  .= "<div>";
		
		$retorno .= "<span style=\"white-space: nowrap;\">{$erroSpan}";
		
		$retorno .= "</div>";
		$retorno .= "</fieldset>";
		
		echo $retorno;
		die();		
		
		
	}
	
}